import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Ap0stoL2
 * Date: 2023-07-19
 * Time: 8:18
 */
public class JDBCDemo3  {
    public static void main(String[] args) throws SQLException {
        //假定数据库里面有一个 student 表(id name),往里面插入一些数据

        //让用户自行输入学号和姓名
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要的学查询的学号: ");
        int studentId = scanner.nextInt();


        //1.创建"数据源"
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/yzy1?characterEncoding=utf8&useSSL=false");
        //设置用户
        ((MysqlDataSource) dataSource).setUser("root");
        //设置密码
        ((MysqlDataSource) dataSource).setPassword("yzy824ap0stol");


        //2.跟数据库服务器建立连接
        Connection connection= dataSource.getConnection();


        //3.SQL语句构造
        String sql = "select * from student where id = ?";
        PreparedStatement statement= connection.prepareStatement(sql);
        statement.setInt(1,studentId);

        //4.执行查询操作
        //返回值是一个ResultSet对象,表示一个表格
        ResultSet resultSet = statement.executeQuery(); //返回值为这次操作影响了几行

        //遍历,以行位访问
        //next会先指向第一个元素之前,每次调用next,往下走一步,查看是否有可用元素,有的话返回true,从而进入循环,否则返回false,退出循环
        //在循环中就可以取出这一行的每一列
        //当执行完最后一行,再执行next,就会返回false
        while(resultSet.next())
        {
            int id=resultSet.getInt("id");//get获取当前行的某一列
            String name= resultSet.getString("name");//get里面写列名
            System.out.println("id: "+id+" name: "+name);
        }


        //5.释放必要资源
        statement.close();
        connection.close();
        resultSet.close(); //只要是对象都要关闭
    }
}

